耦合是程序结构中模块间相互关联紧密程度的度量,耦合程度取决于各个模块间接口的复杂程度、调用模块的方式,以及接口的信息量。耦合分为七种:
1、 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,非直接耦合的模块独立性最强
2、 数据耦合:一个模块访问另一个模块时,彼此之间是通过简单变量(不是控制参数、公共数据结构和外部变量)来交换输入、输出信息的,这种耦合为数据耦合
3、 标记耦合:一组模块通过参数表传递记录信息,就是标记耦合,这个记录是某一数据结构的子结构,而不是简单变更。
4、 控制耦合:一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,称为控制耦合
5、 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称为外部耦合。
6、 公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区。
7、 内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口。
内聚是一个模块内部各个元素彼此结合的紧密程度的度量,各元素之间的联系越紧密,内聚性越高,与其他模块间的耦合性就越低,而模块独立性就越强。
在设计模块时应尽量争取高内聚,内聚性分为七种:
1、 功能内聚:实现一个功能,内聚性最强
2、 信息内聚:完成多个功能,各个功能在同一数据结构上操作
3、 通信内聚:模块内各功能部分使用了相同的输入数据或产生相同的输出数据
4、 过程内聚:把流程图中某一部分划出组成模块,即过程内聚,如循环部分、判定部分、计算部分分成三个模块
5、 时间内聚:又称为经典内聚,大多为多功能模块,模块的各个功能的执行与时间有关,如初始化模块和终止模块
6、 逻辑内聚:把几种相关的功能组合在一起,由传送给模块的判定参数来确定执行哪一种功能。
7、 巧合内聚:模块内各部分之间没有联系,或即使有联系,也很松散,是内聚程序最低的模块。